AWS Step FunctionsステートマシンでCloudWatchメトリクスを発行する
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、AWS Step FunctionsステートマシンでCloudWatchメトリクスを発行してみました。
構成
下記のような構成を作成します。
やってみた
Lambda関数の作成
発行するメトリクスの値はLambda関数を使用してランダムな値を生成することにします。
下記のコードでLambda関数randomTemperature
を作成します。0
から30
の間のtemperatureの値を返します。
exports.handler = async () => { const max = 30; return {temperature: Math.floor( Math.random() * max )}; };
ステートマシンの作成
Step Functions Workflow Studioでステートマシンを作成します。
Step Functionsのマネジメントコンソールでステートマシンの作成を開始します。
[次へ]をクリックします。
[アクション]からAWS Lambda Invoke
をドラッグして追加します。
[Lambda Invoke]の[設定]で、[APIパラメータ]-[Function name]で先程のLambda関数を指定し、[ペイロード]でNo payload
を指定します。
続いて[action]をPutMetricData
で検索して[CloudWatch System Manager GetParameter]をLambda Invokeの下の位置にドラッグして追加します。
[PutMetricData]の[設定]で、[APIパラメータ]で下記のJSONを指定します。これによりLambda関数が生成したtemperatureの値をメトリクスとして発行できます。[次へ]をクリックします。
{ "MetricData": [ { "MetricName": "temperature", "Value.$": "$.temperature" } ], "Namespace": "StateMachinePublish" }
生成されたコードを確認します。Lambda実行のリトライの処理は既定で設定されるようですね。[次へ]をクリックします。
今回生成されたコード(ステートマシン定義)は下記のようになります。
{ "Comment": "A description of my state machine", "StartAt": "Lambda Invoke", "States": { "Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:randomTemperature:$LATEST" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ], "Next": "PutMetricData" }, "PutMetricData": { "Type": "Task", "End": true, "Parameters": { "MetricData": [ { "MetricName": "temperature", "Value.$": "$.temperature" } ], "Namespace": "StateMachinePublish" }, "Resource": "arn:aws:states:::aws-sdk:cloudwatch:putMetricData" } } }
[ステートマシンの作成]をクリックして作成を完了します。(PutMetricDataの権限が不足しているとのことなので、後で追加します。)
ステートマシンを作成できました。不足しているパラメータストアへのアクセス権限を付与するために[IAMでロールを編集]をクリックします。
今回はAWS管理ポリシーのCloudWatchFullAccess
をアタッチしました。(実際の利用では必要に応じて権限を絞ってください)
EventBridgeルールの作成
前述のステーマシンを「1分毎(rate(1 minute))」で実行するEventBridgeルールを作成します。
作成方法については以前の下記エントリに詳しく紹介しています。
動作
CloudWatchのコンソールでグラフ化されたメトリクスを確認することができます。1分毎に0
から30
の間の値が発行されていますね。
参考
以上